MongoDB-এর Aggregation Framework হল একটি শক্তিশালী এবং নমনীয় ডেটা প্রক্রিয়া পদ্ধতি যা ডেটা গ্রুপ করা, ফিল্টার করা, সমষ্টি করা, এবং অন্যান্য জটিল অপারেশন করার জন্য ব্যবহৃত হয়। এটি ডেটা বিশ্লেষণের জন্য SQL-এ GROUP BY, HAVING, JOIN ইত্যাদির মতো কাজ করতে সক্ষম।
MongoDB-তে Aggregation প্রক্রিয়া aggregate() মেথড ব্যবহার করে সম্পন্ন হয়, যা একটি পিপলাইন ভিত্তিক পদ্ধতির মাধ্যমে বিভিন্ন ধরণের ডেটা ট্রান্সফরমেশন করতে সাহায্য করে। এটি documents এর একটি সিরিজে বিভিন্ন অপারেশন প্রযোজ্য করে, যেগুলো শেষমেশ একটি সমষ্টি বা আউটপুট ডকুমেন্ট প্রদান করে।
Java তে MongoDB Aggregation Framework ব্যবহার করতে, MongoDB Java Driver এর মাধ্যমে এটি করা হয়।
Aggregation Pipeline:
MongoDB Aggregation Framework-এ Pipeline হল এক বা একাধিক stages এর সিরিজ, যা ডেটা প্রক্রিয়া করার জন্য ব্যবহার করা হয়। প্রতিটি stage MongoDB ডেটা তে কিছু পরিবর্তন বা transformation করতে পারে এবং পরবর্তী stage এর জন্য আউটপুট প্রদান করে।
Aggregation Pipeline Stages:
$match: ডকুমেন্টগুলোকে filter করতে ব্যবহৃত হয়।$group: ডকুমেন্টগুলোকে গ্রুপ করতে ব্যবহৃত হয় (SQL এর GROUP BY এর মতো)।$sort: ডেটা সোর্ট করতে ব্যবহৃত হয়।$project: ডকুমেন্টের ফিল্ডসমূহের সাথে কাজ করতে ব্যবহৃত হয় (যেমন, নতুন ফিল্ড তৈরি বা মুছে ফেলা)।$limit: ডকুমেন্টের সংখ্যা সীমাবদ্ধ করতে ব্যবহৃত হয়।$skip: কিছু ডকুমেন্ট স্কিপ করতে ব্যবহৃত হয়।$unwind: Arrays কে আলাদা আলাদা ডকুমেন্টে ভাঙতে ব্যবহৃত হয়।
Aggregation Framework উদাহরণ (Java):
Step 1: MongoDB Java Driver সেটআপ
MongoDB Java ড্রাইভার ব্যবহার করে আপনাকে প্রথমে MongoDB ক্লায়েন্ট তৈরি করতে হবে এবং তারপর নির্দিষ্ট ডাটাবেস এবং collection নির্বাচন করতে হবে।
Maven বা Gradle প্রজেক্টে MongoDB Java Driver অন্তর্ভুক্ত করুন:
pom.xml (Maven):
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>4.2.3</version> <!-- Use latest version -->
</dependency>
build.gradle (Gradle):
dependencies {
implementation 'org.mongodb:mongo-java-driver:4.2.3' // Use latest version
}
Step 2: Aggregation Query Example (Java)
এখানে MongoDB তে Aggregation Pipeline ব্যবহার করার জন্য একটি উদাহরণ দেওয়া হচ্ছে, যেখানে বিভিন্ন স্টেজ ব্যবহার করা হয়েছে:
import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.AggregateIterable;
import org.bson.Document;
import java.util.Arrays;
public class MongoDBAggregationExample {
public static void main(String[] args) {
// MongoClient তৈরি করা
MongoClient mongoClient = new MongoClient("localhost", 27017);
// ডাটাবেস নির্বাচন
MongoDatabase database = mongoClient.getDatabase("testdb");
// Collection নির্বাচন
MongoCollection<Document> collection = database.getCollection("employees");
// Aggregation Pipeline তৈরি করা
AggregateIterable<Document> result = collection.aggregate(Arrays.asList(
// $match stage - ফিল্টারিং
new Document("$match", new Document("department", "Sales")),
// $group stage - গ্রুপিং
new Document("$group", new Document("_id", "$name")
.append("totalSales", new Document("$sum", "$salesAmount"))),
// $sort stage - সোর্টিং
new Document("$sort", new Document("totalSales", -1)) // descending order
));
// ফলাফল আউটপুট করা
for (Document doc : result) {
System.out.println(doc.toJson());
}
// MongoClient বন্ধ করা
mongoClient.close();
}
}
ব্যাখ্যা:
- MongoClient: এটি MongoDB সার্ভারের সাথে সংযোগ স্থাপন করে।
- MongoDatabase: MongoDB ডাটাবেস নির্বাচন করে।
- MongoCollection: MongoDB collection নির্বাচন করা হয়, যেখানে aggregation চলবে।
- Aggregation Pipeline:
$matchস্টেজ: এটি Sales ডিপার্টমেন্টের সমস্ত ডকুমেন্ট ফিল্টার করে।$groupস্টেজ: এখানে, আমরা গ্রুপ করছি কর্মচারীদের নাম অনুযায়ী এবং তাদের মোট বিক্রয়ের পরিমাণ (sum) গণনা করছি।$sortস্টেজ: এই স্টেজে বিক্রয়ের পরিমাণ অনুযায়ী কর্মচারীদের নাম descending order এ সাজানো হচ্ছে।
Output:
{ "_id" : "Alice", "totalSales" : 5000 }
{ "_id" : "Bob", "totalSales" : 4000 }
{ "_id" : "Charlie", "totalSales" : 3000 }
Aggregation Framework এর সাধারণ স্টেজসমূহ:
$match:whereক্লজের মতো কাজ করে, ডকুমেন্ট ফিল্টার করার জন্য।Example:
new Document("$match", new Document("age", new Document("$gt", 30)))
$group:- ডকুমেন্টগুলিকে গ্রুপ করে এবং aggregation functions যেমন
$sum,$avg,$min,$maxইত্যাদি প্রয়োগ করতে ব্যবহার করা হয়। Example:
new Document("$group", new Document("_id", "$department") .append("averageSalary", new Document("$avg", "$salary")))
- ডকুমেন্টগুলিকে গ্রুপ করে এবং aggregation functions যেমন
$sort:- ডেটা সোর্ট করতে ব্যবহার হয়।
Example:
new Document("$sort", new Document("age", 1)) // ascending order
$project:- শুধুমাত্র কিছু নির্দিষ্ট ফিল্ড প্রজেক্ট করার জন্য ব্যবহার হয়।
Example:
new Document("$project", new Document("name", 1).append("age", 1))
$limit:- রেজাল্টের সংখ্যা সীমিত করতে ব্যবহার হয়।
Example:
new Document("$limit", 5)
$unwind:- একটি অ্যারে ফিল্ডকে আলাদা আলাদা ডকুমেন্টে ভাঙতে ব্যবহার হয়।
Example:
new Document("$unwind", "$items")
MongoDB-এর Aggregation Framework একটি শক্তিশালী উপায় MongoDB ডাটাবেস থেকে তথ্য বের করার জন্য। এটি data filtering, grouping, sorting, projecting এবং transforming ডেটা এর মাধ্যমে খুবই কার্যকরী এবং দ্রুত তথ্য বিশ্লেষণ করতে সাহায্য করে। Java MongoDB ড্রাইভার ব্যবহার করে আপনি সহজেই Aggregation Pipeline তৈরি করতে পারেন এবং MongoDB থেকে ফলাফল বের করতে পারেন।
MongoDB-তে Aggregation Framework একটি শক্তিশালী বৈশিষ্ট্য, যা ব্যবহারকারীদের ডেটা ম্যানিপুলেশন এবং বিশ্লেষণের জন্য একাধিক ধাপ (stages) চালানোর অনুমতি দেয়। এটি SQL এর GROUP BY, JOIN, এবং HAVING এর মতো কাজ করতে সক্ষম, তবে MongoDB-তে এটি একটি খুবই দক্ষ পদ্ধতি যা ডেটা ফিল্টার, গ্রুপ, সাজানো, ট্রান্সফর্মেশন ইত্যাদি সম্পন্ন করতে ব্যবহৃত হয়।
MongoDB তে, aggregation এমন একটি প্রক্রিয়া, যেখানে ডেটা বিভিন্ন স্টেজের মাধ্যমে প্রক্রিয়া করা হয় এবং শেষ পর্যন্ত একটি নির্দিষ্ট ফলাফল পাওয়া যায়। এই প্রক্রিয়াটি খুবই গুরুত্বপূর্ণ যখন ডেটাবেস থেকে জটিল রিপোর্ট বা বিশ্লেষণমূলক ডেটা বের করতে হয়।
Aggregation Framework কি?
MongoDB Aggregation Framework হল একটি পদ্ধতি যার মাধ্যমে আপনি বিভিন্ন operations প্রয়োগ করে ডেটাকে বিশ্লেষণ এবং প্রক্রিয়া করতে পারেন। MongoDB এর Aggregation Framework এর কিছু জনপ্রিয় ব্যবহার হল:
- Grouping: ডেটাকে নির্দিষ্ট ফিল্ড অনুযায়ী গ্রুপ করা।
- Sorting: ডেটাকে কোনো নির্দিষ্ট ক্রমে সাজানো।
- Filtering: ডেটা থেকে কিছু নির্দিষ্ট মান নির্বাচন করা।
- Projection: ডেটার কিছু নির্দিষ্ট অংশ নির্বাচন করা।
- Lookup: অন্য collection এর সাথে data join করা (এটি SQL এর
JOINএর সমতুল্য)।
MongoDB-তে aggregation সাধারণত aggregate() মেথড ব্যবহার করে করা হয়।
Aggregation Framework এর মুল স্টেজগুলো:
MongoDB Aggregation Framework সাধারণত stages এর মাধ্যমে কাজ করে, এবং প্রতিটি স্টেজ ডেটার ওপর একটি নির্দিষ্ট কাজ করে। কিছু সাধারণ স্টেজ হল:
- $match: ডেটাকে ফিল্টার করা (SQL এর
WHEREএর মতো) - $group: ডেটাকে গ্রুপ করা (SQL এর
GROUP BYএর মতো) - $project: ডেটা ফিল্ডের কিছু নির্দিষ্ট অংশ নির্বাচন করা
- $sort: ডেটাকে সাজানো
- $limit: একটি নির্দিষ্ট সংখ্যক ডকুমেন্ট নির্বাচন করা
- $skip: ডেটার মধ্যে থেকে কিছু ডকুমেন্ট বাদ দেওয়া
- $lookup: অন্যান্য collection এর সাথে ডেটা যোগ করা (SQL এর
JOINএর মতো)
Aggregation Framework কেন প্রয়োজন?
MongoDB তে Aggregation Framework প্রয়োজনীয় কারণ এটি অনেক শক্তিশালী এবং নমনীয় ডেটা বিশ্লেষণ সরঞ্জাম প্রদান করে। এর মাধ্যমে আপনি খুব দ্রুত ডেটার উপর জটিল কাজ করতে পারেন যা সাধারণত SQL ডাটাবেসে আরও বেশি প্রচেষ্টা ও সময় নেয়।
Aggregation Framework এর সুবিধা:
- Complex Queries: এটি আপনার ডেটার উপর জটিল প্রশ্ন যেমন গ্রুপিং, সোর্টিং, ফিল্টারিং ইত্যাদি কার্যকরভাবে চালাতে সাহায্য করে।
- Performance: MongoDB-তে aggregation উচ্চ পারফরম্যান্সে কাজ করে কারণ এটি ইনডেক্স ব্যবহার করে এবং পুরো ডেটাবেস স্ক্যান না করে।
- Flexible Data Processing: ডেটাকে বিভিন্ন স্টেজের মাধ্যমে প্রক্রিয়া করা সম্ভব, যা বিভিন্ন ধরনের ডেটা বিশ্লেষণের জন্য উপযোগী।
- Join Support: MongoDB aggregation এর মাধ্যমে
$lookupস্টেজ ব্যবহার করে একাধিক collection এর মধ্যে যোগফল (join) করা সম্ভব, যা SQL এরJOINএর সমতুল্য।
Aggregation Framework এর উদাহরণ
এখন চলুন কিছু উদাহরণের মাধ্যমে MongoDB Aggregation Framework কীভাবে কাজ করে তা দেখি।
1. $match স্টেজ (Filtering Data)
import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.AggregateIterable;
import org.bson.Document;
public class AggregationExample {
public static void main(String[] args) {
// MongoDB ক্লায়েন্ট তৈরি
MongoClient mongoClient = new MongoClient("localhost", 27017);
// ডাটাবেস নির্বাচন
MongoDatabase database = mongoClient.getDatabase("testdb");
// কোলেকশন নির্বাচন
MongoCollection<Document> collection = database.getCollection("users");
// Aggregation Pipeline: $match স্টেজ (ফিল্টারিং)
AggregateIterable<Document> result = collection.aggregate(
Arrays.asList(
new Document("$match", new Document("age", new Document("$gt", 30))) // Filter users where age > 30
)
);
// ফলাফল প্রিন্ট করা
for (Document doc : result) {
System.out.println(doc.toJson());
}
mongoClient.close();
}
}
2. $group স্টেজ (Grouping Data)
import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.AggregateIterable;
import org.bson.Document;
import java.util.Arrays;
public class GroupByExample {
public static void main(String[] args) {
MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("testdb");
MongoCollection<Document> collection = database.getCollection("users");
// Aggregation Pipeline: $group স্টেজ (গ্রুপিং)
AggregateIterable<Document> result = collection.aggregate(
Arrays.asList(
new Document("$group", new Document("_id", "$age") // Group by age
.append("count", new Document("$sum", 1))) // Count users for each age
)
);
// ফলাফল প্রিন্ট করা
for (Document doc : result) {
System.out.println(doc.toJson());
}
mongoClient.close();
}
}
3. $lookup স্টেজ (Join Data from Another Collection)
MongoDB-তে আপনি $lookup স্টেজ ব্যবহার করে দুটি collection এর মধ্যে join করতে পারেন, যা SQL এর JOIN এর মতো কাজ করে।
import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.AggregateIterable;
import org.bson.Document;
import java.util.Arrays;
public class LookupExample {
public static void main(String[] args) {
MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("testdb");
MongoCollection<Document> collection1 = database.getCollection("orders");
MongoCollection<Document> collection2 = database.getCollection("products");
// Aggregation Pipeline: $lookup স্টেজ (JOIN)
AggregateIterable<Document> result = collection1.aggregate(
Arrays.asList(
new Document("$lookup", new Document("from", "products") // Join with 'products' collection
.append("localField", "product_id")
.append("foreignField", "_id")
.append("as", "productDetails"))
)
);
// ফলাফল প্রিন্ট করা
for (Document doc : result) {
System.out.println(doc.toJson());
}
mongoClient.close();
}
}
MongoDB তে Aggregation Framework হল একটি অত্যন্ত শক্তিশালী এবং নমনীয় টুল যা আপনাকে complex queries, data transformations, grouping, filtering, এবং sorting সহ অনেক ধরনের কাজ করতে সাহায্য করে। $match, $group, $sort, $lookup সহ আরও অনেক স্টেজ MongoDB তে ডেটা বিশ্লেষণ এবং ম্যানিপুলেশন করার জন্য ব্যবহৃত হয়।
- $match: ডেটা ফিল্টার করতে ব্যবহৃত হয়।
- $group: ডেটাকে গ্রুপ করার জন্য ব্যবহৃত হয়।
- $lookup: অন্য collection এর সাথে ডেটা join করতে ব্যবহৃত হয়।
এটি আপনাকে SQL এর মতো কাজ করতে সক্ষম করে, তবে MongoDB এর একটি নেটিভ এবং দ্রুতগতির পদ্ধতি হিসেবে এটি কাজ করে, যা বড় ডেটাসেটের সাথে খুব কার্যকরী।
MongoDB তে Aggregation Pipeline একটি শক্তিশালী ফিচার যা আপনাকে ডেটা প্রক্রিয়া করতে এবং বিভিন্ন ধরনের ডেটা ট্রান্সফরমেশন বা অ্যানালাইসিস করতে সহায়তা করে। এটি data aggregation এর জন্য ব্যবহৃত হয়, যেমন ডেটা গ্রুপিং, ফিল্টারিং, সাজানো, মোটকথা একটি ডেটাসেটের ওপর বিভিন্ন ধরণের পরিসংখ্যান বা ট্রান্সফরমেশন প্রয়োগ করা।
MongoDB তে aggregation pipeline ব্যবহার করা হয় aggregation framework এর মাধ্যমে। Aggregation Pipeline এ একাধিক stages থাকে, যেখানে প্রতিটি stage ডেটার ওপর একটি নির্দিষ্ট কার্যকলাপ সম্পন্ন করে এবং পরবর্তী stage-এ সেই ফলাফল পাস করা হয়। এটি MongoDB তে ডেটা অপারেশনগুলোকে অপারেশন চেইনিং এর মাধ্যমে খুবই কার্যকরী এবং দ্রুত করতে সাহায্য করে।
Aggregation Pipeline এর মূল ধারণা:
- Pipeline: Aggregation Pipeline MongoDB-তে বিভিন্ন stages এর মাধ্যমে ডেটা প্রক্রিয়া করে। প্রতিটি stage একটি নির্দিষ্ট কাজ করে (যেমন ফিল্টার করা, গ্রুপ করা, সাজানো) এবং পরবর্তী stage-এ সেই ফলাফল পাঠানো হয়।
- Stages: MongoDB Aggregation Pipeline এ বিভিন্ন ধরনের stages ব্যবহার করা হয়, যেগুলি ডেটাকে বিভিন্ন উপায়ে প্রক্রিয়া করে। কিছু সাধারণ stage হল:
- $match: ডেটাকে ফিল্টার করতে ব্যবহৃত হয়, অর্থাৎ নির্দিষ্ট শর্ত পূরণ করে এমন ডকুমেন্টগুলো নির্বাচন করা।
- $group: ডেটাকে গ্রুপ করার জন্য ব্যবহৃত হয়, যা একটি নির্দিষ্ট ফিল্ডের ভিত্তিতে ডকুমেন্টগুলো গ্রুপ করে এবং গণনা বা পরিসংখ্যান তৈরি করে।
- $project: ডেটাকে নতুন ফিল্ড, বা প্রকার সহ পরিবর্তন করতে ব্যবহৃত হয়, যেমন কিছু ফিল্ড বাদ দেওয়া বা নতুন ফিল্ড যোগ করা।
- $sort: ডেটা সাজানোর জন্য ব্যবহৃত হয়।
- $limit: ডেটা সীমাবদ্ধ করার জন্য ব্যবহৃত হয়।
- $skip: কিছু ডেটা বাদ দিয়ে পরবর্তী ডেটা আনা হয়।
Aggregation Pipeline Example in MongoDB:
ধরা যাক, আমাদের একটি "orders" নামে collection রয়েছে যেখানে বিভিন্ন order সংরক্ষিত থাকে, এবং আমরা এই collection থেকে কিছু specific aggregation operation করতে চাই।
Collection Structure:
{
"_id": ObjectId("..."),
"orderId": 101,
"customerName": "John Doe",
"amount": 500,
"status": "Completed",
"date": "2023-12-01"
}
1. Filter Orders by Status and Calculate Total Amount:
এখানে আমরা orders collection থেকে status = "Completed" এমন সমস্ত অর্ডার ফিল্টার করে তাদের মোট পরিমাণ (amount) যোগ করতে চাই।
import com.mongodb.MongoClient;
import com.mongodb.client.AggregateIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import java.util.Arrays;
public class AggregationExample {
public static void main(String[] args) {
// MongoDB কানেকশন তৈরি
MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("mydb");
MongoCollection<Document> collection = database.getCollection("orders");
// Aggregation pipeline তৈরি
AggregateIterable<Document> result = collection.aggregate(Arrays.asList(
// Step 1: $match stage - status "Completed" এর অর্ডারগুলো ফিল্টার করা
new Document("$match", new Document("status", "Completed")),
// Step 2: $group stage - মোট amount হিসাব করা
new Document("$group", new Document("_id", null)
.append("totalAmount", new Document("$sum", "$amount")))
));
// Result প্রিন্ট করা
for (Document doc : result) {
System.out.println(doc.toJson());
}
mongoClient.close();
}
}
Aggregation Pipeline ব্যাখ্যা:
- $match: প্রথম stage তে আমরা status = "Completed" অর্ডারগুলো ফিল্টার করেছি।
- $group: দ্বিতীয় stage তে,
$sumঅপারেটরের মাধ্যমে ফিল্টার করা ডেটার amount ফিল্ডের মোট পরিমাণ যোগ করা হয়েছে।
এখানে, যদি status = "Completed" অর্ডারের মোট পরিমাণ 5000 হয়, তাহলে আউটপুট হবে:
{ "_id" : null, "totalAmount" : 5000 }
2. Group Orders by Customer and Calculate Total Amount per Customer:
এখন, আমরা চাই যে সমস্ত অর্ডারগুলোকে গ্রুপ করা হোক customerName এর ভিত্তিতে এবং প্রতিটি গ্রুপের মোট পরিমাণ হিসাব করা হোক।
import com.mongodb.MongoClient;
import com.mongodb.client.AggregateIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import java.util.Arrays;
public class GroupByCustomerExample {
public static void main(String[] args) {
// MongoDB কানেকশন তৈরি
MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("mydb");
MongoCollection<Document> collection = database.getCollection("orders");
// Aggregation pipeline তৈরি
AggregateIterable<Document> result = collection.aggregate(Arrays.asList(
// Step 1: $group stage - customerName ভিত্তিতে গ্রুপ করা এবং তাদের মোট amount যোগ করা
new Document("$group", new Document("_id", "$customerName")
.append("totalAmount", new Document("$sum", "$amount")))
));
// Result প্রিন্ট করা
for (Document doc : result) {
System.out.println(doc.toJson());
}
mongoClient.close();
}
}
Aggregation Pipeline ব্যাখ্যা:
- $group: গ্রুপিং করার সময়, আমরা customerName অনুযায়ী গ্রুপ করছি এবং প্রতিটি গ্রুপের জন্য মোট amount গণনা করছি।
এখানে, যদি দুইজন John Doe এবং Alice এর অর্ডার থাকে, তাদের মোট পরিমাণ গণনা হবে এবং আউটপুট হবে:
{ "_id" : "John Doe", "totalAmount" : 1500 }
{ "_id" : "Alice", "totalAmount" : 700 }
3. Sort Orders by Amount:
এখন, আমরা অর্ডারগুলোকে তাদের amount অনুযায়ী সাজাতে চাই। এটি করার জন্য $sort stage ব্যবহার করা হয়।
import com.mongodb.MongoClient;
import com.mongodb.client.AggregateIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import java.util.Arrays;
public class SortOrdersExample {
public static void main(String[] args) {
// MongoDB কানেকশন তৈরি
MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("mydb");
MongoCollection<Document> collection = database.getCollection("orders");
// Aggregation pipeline তৈরি
AggregateIterable<Document> result = collection.aggregate(Arrays.asList(
// Step 1: $sort stage - amount অনুযায়ী সাজানো
new Document("$sort", new Document("amount", -1)) // -1 for descending order
));
// Result প্রিন্ট করা
for (Document doc : result) {
System.out.println(doc.toJson());
}
mongoClient.close();
}
}
Aggregation Pipeline ব্যাখ্যা:
- $sort: এই stage তে আমরা amount ফিল্ড অনুযায়ী সাজাচ্ছি,
-1মানে ডেসেন্ডিং অর্ডারে (বড় থেকে ছোট) সাজানো।
Aggregation Pipeline Summary:
MongoDB তে Aggregation Pipeline এর মাধ্যমে ডেটাকে একাধিক stage এর মাধ্যমে প্রক্রিয়া করা হয়। সাধারণত ব্যবহৃত কিছু stage হল:
- $match: ডেটাকে ফিল্টার করার জন্য ব্যবহৃত হয়।
- $group: ডেটাকে গ্রুপ করার জন্য এবং গণনা, গড়, সর্বাধিক/সর্বনিম্ন মান বের করার জন্য ব্যবহৃত হয়।
- $sort: ডেটা সাজানোর জন্য।
- $project: ডেটা পরিবর্তন বা নির্বাচিত ফিল্ডে কাজ করার জন্য।
- $limit: কিছু ডেটা সীমাবদ্ধ করার জন্য।
- $skip: কিছু ডেটা বাদ দিয়ে পরবর্তী ডেটা আনা।
MongoDB তে Aggregation Pipeline একটি শক্তিশালী উপকরণ যা বিভিন্ন ডেটা ট্রান্সফরমেশন ও অ্যানালাইসিস কার্যক্রম করতে ব্যবহৃত হয়। বিভিন্ন stages ব্যবহার করে আপনি ডেটাকে ফিল্টার, গ্রুপ, সাজানো, পরিবর্তন ইত্যাদি কাজ করতে পারেন। Java তে MongoDB এর Aggregation Pipeline এর সাহায্যে আপনি সহজে এবং কার্যকরীভাবে ডেটা প্রক্রিয়া করতে পারেন।
MongoDB তে Aggregation Framework এমন একটি শক্তিশালী টুল যা ডেটা প্রসেসিং এবং পরিসংখ্যান বিশ্লেষণ করতে ব্যবহৃত হয়। এটি ডেটা থেকে নির্দিষ্ট ইনফরমেশন একত্রিত এবং বিশ্লেষণ করার জন্য বিভিন্ন অপারেটর সরবরাহ করে, যেমন $match, $group, $project, এবং $sort। এই অপারেটরগুলির মাধ্যমে MongoDB তে জটিল কুয়েরি এবং বিশ্লেষণ সহজ হয়।
Aggregation Operators:
- $match:
- $match অপারেটর MongoDB তে ডেটার মধ্যে ফিল্টার করার জন্য ব্যবহৃত হয়। এটি SQL এর WHERE ক্লজের মতো কাজ করে এবং ডেটার মধ্যে নির্দিষ্ট শর্তে মেলানো ডকুমেন্টগুলি বের করে।
- $group:
- $group অপারেটর MongoDB তে ডেটা গ্রুপ করতে ব্যবহৃত হয়। এটি SQL এর GROUP BY ক্লজের মতো কাজ করে এবং গ্রুপবাই অপারেশন চালানোর মাধ্যমে ডেটা বিশ্লেষণ করে।
- $project:
- $project অপারেটর MongoDB তে নির্বাচিত ফিল্ডগুলো দেখানোর জন্য ব্যবহৃত হয়। এটি SQL এর SELECT ক্লজের মতো কাজ করে, যেখানে আপনি ডেটার কোন ফিল্ডগুলি দেখতে চান তা নির্দিষ্ট করতে পারেন।
- $sort:
- $sort অপারেটর MongoDB তে ডেটা সাজানোর জন্য ব্যবহৃত হয়। এটি SQL এর ORDER BY ক্লজের মতো কাজ করে এবং ডেটা এক বা একাধিক ফিল্ডের মাধ্যমে সাজানো যায়।
Aggregation Operators এর উদাহরণ:
1. $match - ডেটা ফিল্টার করা
$match অপারেটর ব্যবহার করে MongoDB তে ডেটা ফিল্টার করা হয়। এটি সিলেক্টেড শর্তের সাথে মেলানো ডকুমেন্টগুলো নির্বাচন করে।
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.AggregateIterable;
import org.bson.Document;
import java.util.Arrays;
public class MongoDBMatchExample {
public static void main(String[] args) {
MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("myDatabase");
MongoCollection<Document> collection = database.getCollection("users");
// Match stage to filter users who are above the age of 30
AggregateIterable<Document> result = collection.aggregate(Arrays.asList(
new Document("$match", new Document("age", new Document("$gt", 30)))
));
// Print the matching documents
for (Document doc : result) {
System.out.println(doc.toJson());
}
mongoClient.close();
}
}
ব্যাখ্যা:
- এখানে $match অপারেটর ব্যবহার করা হয়েছে যাতে age > 30 ডকুমেন্টগুলো ফিল্টার করা যায়।
2. $group - ডেটা গ্রুপ করা
$group অপারেটর ব্যবহার করে MongoDB তে ডেটা গ্রুপ করা হয়। এটি aggregate ফাংশনে ব্যবহার করা হয় যেখানে আপনি group by ফিল্ড এবং aggregation functions যেমন sum, avg, count ইত্যাদি ব্যবহার করতে পারেন।
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.AggregateIterable;
import org.bson.Document;
import java.util.Arrays;
public class MongoDBGroupExample {
public static void main(String[] args) {
MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("myDatabase");
MongoCollection<Document> collection = database.getCollection("users");
// Group stage to group by 'age' and calculate the count
AggregateIterable<Document> result = collection.aggregate(Arrays.asList(
new Document("$group", new Document("_id", "$age").append("count", new Document("$sum", 1)))
));
// Print the grouped documents
for (Document doc : result) {
System.out.println(doc.toJson());
}
mongoClient.close();
}
}
ব্যাখ্যা:
- এখানে $group অপারেটর ব্যবহার করে age ফিল্ডের উপর ভিত্তি করে ডেটা গ্রুপ করা হয়েছে এবং প্রতিটি গ্রুপের সংখ্যা count গণনা করা হয়েছে।
3. $project - ডেটার ফিল্ড নির্বাচিত করা
$project অপারেটর MongoDB তে নির্বাচিত ফিল্ডগুলো প্রদর্শন করতে ব্যবহৃত হয়। আপনি শুধু যে ফিল্ডগুলো দেখতে চান তা নির্দিষ্ট করতে পারেন এবং বাকী ফিল্ডগুলো বাদ দিতে পারেন।
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.AggregateIterable;
import org.bson.Document;
import java.util.Arrays;
public class MongoDBProjectExample {
public static void main(String[] args) {
MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("myDatabase");
MongoCollection<Document> collection = database.getCollection("users");
// Project stage to show only 'name' and 'age' fields
AggregateIterable<Document> result = collection.aggregate(Arrays.asList(
new Document("$project", new Document("name", 1).append("age", 1))
));
// Print the projected documents
for (Document doc : result) {
System.out.println(doc.toJson());
}
mongoClient.close();
}
}
ব্যাখ্যা:
- এখানে $project অপারেটর ব্যবহার করা হয়েছে, যাতে শুধুমাত্র name এবং age ফিল্ডগুলো দেখানো হয়।
4. $sort - ডেটা সাজানো
$sort অপারেটর MongoDB তে ডেটা সাজানোর জন্য ব্যবহৃত হয়। এটি ASC (ascending) বা DESC (descending) অর্ডারে সাজানো যায়।
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.AggregateIterable;
import org.bson.Document;
import java.util.Arrays;
public class MongoDBSortExample {
public static void main(String[] args) {
MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("myDatabase");
MongoCollection<Document> collection = database.getCollection("users");
// Sort stage to sort by 'age' in descending order
AggregateIterable<Document> result = collection.aggregate(Arrays.asList(
new Document("$sort", new Document("age", -1)) // -1 for descending order
));
// Print the sorted documents
for (Document doc : result) {
System.out.println(doc.toJson());
}
mongoClient.close();
}
}
ব্যাখ্যা:
- এখানে $sort অপারেটর ব্যবহার করা হয়েছে, যাতে age ফিল্ড অনুযায়ী ডেটা ডেসেন্ডিং অর্ডারে সাজানো হয় (
-1denotes descending order)।
Aggregation Operators এর মিশ্রিত ব্যবহার:
MongoDB তে আপনি বিভিন্ন aggregation অপারেটর একসাথে ব্যবহার করতে পারেন। যেমন, আপনি $match, $group, $sort, এবং $project একসাথে ব্যবহার করে একটি জটিল কুয়েরি তৈরি করতে পারেন।
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.AggregateIterable;
import org.bson.Document;
import java.util.Arrays;
public class MongoDBComplexAggregationExample {
public static void main(String[] args) {
MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("myDatabase");
MongoCollection<Document> collection = database.getCollection("users");
// Complex aggregation pipeline with match, group, project, and sort
AggregateIterable<Document> result = collection.aggregate(Arrays.asList(
new Document("$match", new Document("age", new Document("$gt", 25))), // Match age > 25
new Document("$group", new Document("_id", "$age").append("count", new Document("$sum", 1))), // Group by age
new Document("$project", new Document("age", "$_id").append("userCount", "$count")), // Project fields
new Document("$sort", new Document("age", 1)) // Sort by age in ascending order
));
// Print the aggregation result
for (Document doc : result) {
System.out.println(doc.toJson());
}
mongoClient.close();
}
}
ব্যাখ্যা:
- এই উদাহরণে $match, $group, $project, এবং $sort অপারেটরগুলি একত্রে ব্যবহৃত হয়েছে।
- প্রথমে $match দ্বারা বয়সের উপর ফিল্টার করা হয়েছে, তারপর $group দ্বারা গ্রুপ করা হয়েছে, তারপর $project দ্বারা প্রয়োজনীয় ফিল্ডস প্রদর্শন করা হয়েছে এবং শেষমেশ $sort দ্বারা সাজানো হয়েছে।
MongoDB তে Aggregation Operators (যেমন $match, $group, $project, $sort) ডেটা প্রসেসিং এবং বিশ্লেষণ করার জন্য অত্যন্ত শক্তিশালী টুল। এগুলি ব্যবহার করে আপনি জটিল কুয়েরি তৈরি করতে পারেন, যেমন ডেটা ফিল্টারিং, গ্রুপিং, নির্বাচিত ফিল্ড প্রদর্শন এবং সাজানো। MongoDB এর Aggregation Framework অত্যন্ত কার্যকরী এবং দ্রুত পারফরম্যান্স প্রদান করে, যা বিভিন্ন ধরনের বিশ্লেষণ এবং ডেটা প্রসেসিং কার্যক্রমকে আরও সহজ করে তোলে।
MongoDB-তে Aggregation অপারেশনগুলি অত্যন্ত শক্তিশালী এবং কার্যকরী, বিশেষ করে যখন আপনি বিভিন্ন ধরনের ডেটা প্রসেসিং (যেমন গোষ্ঠীভুক্তকরণ, ফিল্টারিং, Sorting, Joining) করতে চান। MongoDB-এর Aggregation Framework ব্যবহার করে আপনি জটিল কোয়্যারী করতে পারেন যা অনেক স্টেপ এবং অপারেশন জড়িত থাকে।
Java MongoDB Driver এর মাধ্যমে Aggregation Queries তৈরি ও বাস্তবায়ন করা যেতে পারে। এখানে, আমরা Complex Aggregation Query তৈরি এবং Java-তে বাস্তবায়ন করার পদ্ধতি দেখব।
MongoDB Aggregation Framework:
MongoDB-এর Aggregation Framework সাধারণত একটি পাইপলাইন পদ্ধতিতে কাজ করে। এই ফ্রেমওয়ার্কে $match, $group, $sort, $project, $unwind, এবং অন্যান্য অনেক স্টেপ ব্যবহার করা হয়।
Aggregation Pipeline Operators:
- $match: ডেটার মধ্যে ফিল্টারিং করে শুধুমাত্র নির্দিষ্ট ডকুমেন্টগুলো নির্বাচন করে।
- $group: ডেটাকে গ্রুপ করে এবং গোষ্ঠীভুক্ত ডেটার উপর ফাংশন (যেমন, COUNT, SUM, AVG) প্রয়োগ করে।
- $sort: ডেটাকে কোনো নির্দিষ্ট কন্ডিশনে সাজায়।
- $project: নির্দিষ্ট ফিল্ড বা ডেটার কাঠামো পরিবর্তন করে।
- $unwind: অ্যারে ডেটাকে একক ডকুমেন্টে রূপান্তরিত করে।
Complex Aggregation Query উদাহরণ:
ধরা যাক, আমাদের একটি students নামক কোলেকশন রয়েছে, যেখানে স্টুডেন্টদের তথ্য রাখা আছে। আমরা চাই এমন একটি complex aggregation query তৈরি করতে যা নিম্নলিখিত কাজ করবে:
- Age এর উপর ভিত্তি করে গ্রুপিং (যেমন, ছাত্রদের বয়সের মধ্যে গোষ্ঠী তৈরি করা)।
- প্রতিটি বয়সের জন্য ছাত্রদের গড় স্কোর বের করা।
- Grade এর উপর ভিত্তি করে সাজানো (যে গ্রেডে বেশি ছাত্র রয়েছে সেই গ্রেডটি প্রথমে দেখানো হবে)।
- শুধুমাত্র সেগুলি প্রদর্শন করা যাদের গড় স্কোর ৫০ এর উপরে।
MongoDB Aggregation Query (Mongo Shell):
db.students.aggregate([
{ $match: { score: { $gte: 50 } } }, // Filter students with score >= 50
{ $group: {
_id: "$age", // Grouping by age
avgScore: { $avg: "$score" }, // Calculating average score for each age group
count: { $sum: 1 } // Counting the number of students in each group
}},
{ $sort: { count: -1 } }, // Sorting by the number of students in each age group
{ $project: { _id: 0, age: "$_id", avgScore: 1, count: 1 } } // Projecting the required fields
])
Java MongoDB Code: Complex Aggregation Query বাস্তবায়ন:
এখন আমরা উপরের MongoDB অ্যাগ্রিগেশন কোয়্যারিটি Java-তে MongoDB Java Driver ব্যবহার করে বাস্তবায়ন করব।
Java Code:
import com.mongodb.MongoClient;
import com.mongodb.client.AggregateIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import java.util.Arrays;
public class ComplexAggregationExample {
public static void main(String[] args) {
// MongoClient তৈরি করা
MongoClient mongoClient = new MongoClient("localhost", 27017);
// ডেটাবেস নির্বাচন করা
MongoDatabase database = mongoClient.getDatabase("school");
// students কোলেকশন নির্বাচন করা
MongoCollection<Document> collection = database.getCollection("students");
// Aggregation Pipeline তৈরি করা
AggregateIterable<Document> result = collection.aggregate(Arrays.asList(
// Filter students with score >= 50
new Document("$match", new Document("score", new Document("$gte", 50))),
// Group by age, calculate average score and count the number of students
new Document("$group", new Document("_id", "$age")
.append("avgScore", new Document("$avg", "$score"))
.append("count", new Document("$sum", 1))),
// Sort by count in descending order
new Document("$sort", new Document("count", -1)),
// Project the required fields
new Document("$project", new Document("_id", 0)
.append("age", "$_id")
.append("avgScore", 1)
.append("count", 1))
));
// ফলাফল প্রিন্ট করা
for (Document doc : result) {
System.out.println(doc.toJson());
}
// MongoClient বন্ধ করা
mongoClient.close();
}
}
ব্যাখ্যা:
- MongoClient: MongoDB সার্ভারে সংযোগ তৈরি করতে
MongoClientব্যবহার করা হয়েছে। - Aggregation Pipeline:
aggregate()মেথডের মধ্যেArrays.asList()ব্যবহার করে আমরা একাধিক স্টেপ (ম্যাচ, গ্রুপ, সাজানো, এবং প্রজেক্ট) সংজ্ঞায়িত করেছি। - $match:
scoreফিল্টার ব্যবহার করে আমরা এমন ছাত্রদের খুঁজে বের করেছি যাদের স্কোর ৫০ এর বেশি। - $group: ছাত্রদের
ageঅনুযায়ী গ্রুপিং করে, এবং প্রতি গ্রুপের গড় স্কোর এবং ছাত্র সংখ্যা গণনা করেছি। - $sort: ছাত্র সংখ্যা অনুযায়ী গ্রুপগুলো সাজানো হয়েছে।
- $project: আমরা শুধুমাত্র
age,avgScore, এবংcountফিল্ডগুলো প্রজেক্ট করেছি,_idবাদ দিয়েছি।
Output:
{"age":25,"avgScore":72.5,"count":10}
{"age":22,"avgScore":65.0,"count":8}
{"age":30,"avgScore":60.5,"count":5}
...
এখানে, ফলাফলটি বিভিন্ন বয়সের ভিত্তিতে ছাত্রদের গড় স্কোর এবং প্রতিটি বয়সের ছাত্রদের সংখ্যা দেখাচ্ছে। এটি MongoDB Aggregation Framework এর মাধ্যমে জটিল ডেটা প্রসেসিং এবং বিশ্লেষণ করার একটি উদাহরণ।
MongoDB-এর Aggregation Framework একটি অত্যন্ত শক্তিশালী টুল যা বিভিন্ন জটিল ডেটা বিশ্লেষণ এবং প্রসেসিংয়ের জন্য ব্যবহৃত হয়। Java MongoDB Driver দিয়ে complex aggregation queries বাস্তবায়ন করা খুবই সহজ, যেখানে $match, $group, $sort, $project, $unwind ইত্যাদি স্টেপগুলো ব্যবহার করে ডেটা চমৎকারভাবে প্রসেস এবং বিশ্লেষণ করা যায়। MongoDB-এর এই ক্ষমতা Java অ্যাপ্লিকেশনগুলিতে ডেটা স্টোরেজ এবং বিশ্লেষণের জন্য অনেক কার্যকরী হয়ে ওঠে।
Read more